package com.gomyb.redis;

import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.SessionCallback;

import java.util.List;
import java.util.Set;

public interface RedisService {

    void set(String key, String value, Integer time);

    void set(String key, String value);

    String get(String key);

    String hGet(String key, String field);

    void hSet(String key, String field, String value);

    void hDel(String key, String field);

    Long incr(String key);

    void del(String key);

    Set<String> keys(String pattern);

    Set<String> values(String pattern);

    int keySize(String pattern);

    void delAll(String pattern);

    <T> T getObj(String key);

    void setObj(String key, Object value);

    void setObj(String key, Object value, int time);

    Set<String> zRange(String key, long start, long end);

    <T> List<T> zRangeObj(String key, long start, long end);

    Set<String> zRevRange(String key, long start, long end);

    <T> List<T> zRevRangeObj(String key, long start, long end);

    void zAdd(String key, double score, String value);

    void zRem(String key, String... value);

    void zAddObj(String key, double score, Object value);

    Long lRem(String key, String value);

    Boolean exists(String key);

    void rPush(String key, String value);

    Long lLen(String key);

    String rPop(String key);

    String lIndex(String key, Long index);

    Double zIncrBy(String key, double incr, String value);

    Double zScore(String key, String value);

    Long zRevRank(String key, String value);

    Long zCount(String key, Double min, Double max);

    Boolean hExists(String key, String field);

    Long hIncrBy(String key, String field, long value);

    void subscribe(MessageListener messageListener, String... channel);

    Long publish(String channel, String message);

    <T> T execute(SessionCallback<Object> callback);

}
